昨天我們介紹了兩個常用圖形元件「按鈕 QSlider」和「數字框 QSpinBox」以及它們的基本用法。
今天是星期天,所以內容比較簡短一點,介紹常見的元件: QLineEdit 文字輸入框。
文字輸入框,所有圖形程式框架都一定會有的基本元件。Qt 的文字輸入框叫做 QLineEdit
,可以處理各式各樣的文字輸入,比如要求使用者註冊帳號時,輸入姓名、Email、地址等等,都是不可或缺的。
QLineEdit 的基本用法:先用 new 創建一個文字框物件。setPlaceholderText(QString)
可以在使用者還沒輸入文字之前,用淡灰色提示文字框的用途。
setText(QString)
可以設定文字框內的文字,text()
則可取得當前文字框內的字串。setFocus()
則可以讓文字框獲取鍵盤焦點,讓鍵盤輸入文字。
QLineEdit* lineEdit = new QLineEdit;
lineEdit->setPlaceholderText("Placeholder Text");
lineEdit->setFocus();
最常用的信號(signal)則是 QLineEdit::textChanged()
,只要文字框內容有異動,元件就會發出這個信號。
以下示範使用 QLineEdit 讀取發票號碼,然後比對發票號碼,告知使用者是否中獎。
為了讓範例程式精簡易讀,我只寫死了112年 05 ~ 06 月的一組特獎號碼。
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QLabel* label = new QLabel("請輸入112年 05 ~ 06 月統一發票號碼");
QLabel* label2 = new QLabel("");
QLineEdit* lineEdit = new QLineEdit;
lineEdit->setPlaceholderText("八位數號碼");
lineEdit->setFocus();
QVBoxLayout* layout = new QVBoxLayout;
w.setLayout(layout);
layout->addWidget(label);
layout->addWidget(lineEdit);
layout->addWidget(label2);
QObject::connect(lineEdit, &QLineEdit::textChanged, [=]
{
// 使用者輸入文字後,會呼叫此 lambda 函數
if ("29268886" == lineEdit->text())
{
label2->setText("恭喜你!中了特獎1000萬元");
}
else
{
label2->setText("您沒有中特獎");
}
});
w.show();
return a.exec();
}
雖然只能比對寫死的字串有點無趣,但是畢竟這只是作為 QLineEdit 的使用範例。未來你熟練 Qt 後,何不思考如何擴展這隻程式,讓它功能更加強大一些?
您好,程式碼的這段
QObject::connect(lineEdit, QLineEdit::textChanged, [=]
應該是這樣
QObject::connect(lineEdit,&QLineEdit::textChanged,[=]
謝謝,已經更正!